#include <iostream>
#include <unistd.h>
#include <cstdio>
#include <fcntl.h>

void SetBlock(int fd){
	int fl = fcntl(fd, F_GETFL);
	if(fl == -1){
		perror("fcntl");
		return;
	}
	fcntl(fd, F_SETFL, fl | O_NONBLOCK);

}

int main()
{
	SetBlock(0);
	char buffer[1024];
	while(true){
		ssize_t n = read(0, buffer, sizeof(buffer));
		
		// 成功读取
		if(n > 0){
			buffer[n-1] = 0;
			std::cout << buffer << std::endl;
		}
		else if(n == 0){
			// 说明缓冲区中无数据，等待下一次读取
			std::cout << "读取完毕" << std::endl;
			continue;
		}
		else{
			if(errno == EAGAIN || errno == EWOULDBLOCK){
				// 说明缓冲区中无数据，等待下一次读取
				std::cout << "缓冲区中暂时没有数据，等待下一次读取" << std::endl;
				sleep(1);
				continue;
			}
			else if(errno == EINTR){
				// 信号被中断
				continue;
			}
			else{
				// 其他错误
				perror("read error");
			}
		}
	}

	return 0;
}